package com.py.framework.dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.py.framework.entity.OfficeEntity;

/**
 * 部门管理Dao
 *
 * @author Leegern
 * @date 2018年4月25日
 */
public interface OfficeDao {

    /**
     * 添加部门实体
     *
     * @param entity 部门实体
     * @return
     */
    int addOfficeInfo(OfficeEntity entity);

    int getAreaIdByDeptId(@Param("deptId") String deptId);

    /**
     * 分页查询部门列表
     *
     * @param params
     * @return
     */
    List<OfficeEntity> queryOfficeForPage(Map<String, Object> params);

    /**
     * 根据Id查询部门数据
     *
     * @param officeId 父部门Id
     * @return
     */
    List<OfficeEntity> getOfficesByOfficeId(@Param("officeId") String officeId);

    /**
     * 根据部门Id获取部门信息
     *
     * @param id 部门Id
     * @return
     */
    OfficeEntity findOneOffice(@Param("id") long id);

    /**
     * 更新部门信息
     *
     * @param entity 部门实体
     * @return
     */
    int updateOffice(OfficeEntity entity);

    /**
     * 批量删除部门
     *
     * @param ids 部门Id集合
     * @return
     */
    int batchDelOffice(Map<String, Object> params);

    /**
     * 获取用户部门
     *
     * @param userId 用户Id
     * @return
     */
    OfficeEntity getUserOffice(@Param("userId") long userId);

    /**
     * 根据部门编码判断是否有重复数据
     *
     * @param officeCode 部门编码
     * @param officeId   部门Id
     * @return
     */
    List<OfficeEntity> getOfficesByCode(@Param("officeId") long officeId, @Param("officeCode") String officeCode);

    /**
     * 获取顶级部门数据
     *
     * @return
     */
    List<OfficeEntity> getRootOffices();

    /**
     * 获取部门信息
     *
     * @param parentId 部门Id
     * @return
     */
    List<OfficeEntity> getOfficesByPid(@Param("parentId") long parentId);

    /**
     * 根据区域Id查询部门数据
     *
     * @param areaId 区域Id
     * @return
     */
    List<OfficeEntity> getOfficesByAreaId(@Param("areaId") long areaId);

    /**
     * 获取所有部门数据
     *
     * @return
     */
    List<OfficeEntity> getAllOffices();

    /**
     * 根据父部门Id获取子部门数据
     *
     * @param parentId 父部门Id
     * @return
     */
    List<OfficeEntity> getOfficesByParentId(@Param("parentId") String parentId);

    /**
     * 查询所有一级部门id(不包含所有部门)
     */
    List<Long> selectOfficeIdList();

    /**
     * 生成部门token
     *
     * @param officeId
     * @param token
     */
    void generateToken(@Param("officeId") long officeId,
                       @Param("token") String token);

    /**
     * @param params
     * @return
     * @Function 校验新增权限
     * @FileName OfficeDao.java
     * @MethodName checkAddPermission
     * @Date 2018年11月27日 下午2:30:56
     * @Author Min DongXv
     */
    int checkAddPermission(Map<String, Object> params);

    /**
     * 查询已删除的部门
     *
     * @return 已删除的部门id
     * @author YaoS
     * @date 19/5/27 14:38
     */
    List<String> deleteDept();
    
    Long getDeptIdByName(@Param("deptName")String deptName);

}